Перейти до основного вмісту

Перший крок у квантові обчислення

  • Складність: Початковий рівень
  • Використання часу QPU: 11 сек

Вітаємо, хакери! Ми раді бачити тебе на воркшопі. Головна мета цього вступного практичного заняття — підготувати тебе до квантової подорожі: 1) навчити, як встановити qiskit, 2) створити обліковий запис IBM Cloud і отримати api_key та crn для роботи з реальним квантовим комп'ютером, 3) побудувати перший квантовий Circuit, 4) розв'язати квіз про квантові стани та 5) запустити схеми на реальному квантовому комп'ютері й побудувати графік результатів.

1. Спочатку головне: Qiskit

Що таке Qiskit

Qiskit SDK — це високопродуктивний програмний стек, створений для того, щоб допомогти розробникам та дослідникам повністю використовувати потенціал квантових комп'ютерів у корисному масштабі і далі. В його основі лежить Qiskit SDK — програмний пакет розробки з відкритим вихідним кодом для роботи з квантовими комп'ютерами на рівні розширених квантових Circuit, операторів та примітивів. Qiskit SDK дозволяє будь-кому отримати оптимальну продуктивність від реальних квантових комп'ютерів у переважному для них середовищі обчислень.

Поза SDK, Qiskit також включає набір високопродуктивних інструментів і сервісів, як-от Qiskit Runtime Service, що забезпечує оптимізовані обчислення на квантових комп'ютерах IBM через хмару за допомогою примітивів, які керують пом'якшенням помилок. Qiskit Transpiler Service надає найсучасніші евристичні та засновані на штучному інтелекті методи, що підвищують продуктивність для типових задач оптимізації квантових Circuit.

Qiskit functions — каталог сервісів IBM та сторонніх постачальників, що спрощує оптимізацію робочих навантажень і застосування Qiskit у галузевих задачах. Незалежно від того, чи є ти розробником квантового програмного забезпечення, квантовим експериментатором, обчислювальним науковцем або просто починаєш знайомитися з темою — модульна, гнучка архітектура Qiskit дозволяє тобі працювати на тому рівні абстракції, який найкраще відповідає твоїм потребам.

Qiskit розроблено з урахуванням розширюваності та налаштовуваності, тому ти можеш досягати провідної галузевої продуктивності і вирішувати нові типи задач. Висока продуктивність коду означає, що Qiskit SDK працює швидше, використовує менше пам'яті й забезпечує кращі результати, ніж будь-коли раніше. Крім того, Qiskit відкриває тобі доступ до великої спільноти користувачів і розробників, які завжди раді привітати тебе й допомогти з будь-якими запитаннями. Вперше запущена 2019 року, програма Qiskit Advocate — це глобальна, орієнтована на спільноту ініціатива, що залучає фахівців і ентузіастів квантових обчислень з усього світу. З роками адвокати програми стали визнаними лідерами квантової спільноти. Хочеш стати наступним квантовим лідером? Не зволікай із заявкою — тут

Встановлення Qiskit

Спочатку перевір, що версія Python у твоєму середовищі — python>=3.10, аби переконатися, що вона сумісна з останньою версією Qiskit, яку ми використовуватимемо.

from platform import python_version

print(python_version())

Якщо це не так, ти можеш оновити Python за допомогою зручного для тебе інструменту. Якщо ти не впевнений, як це зробити, ось кілька рекомендованих варіантів:

  • MacOS: Homebrew
  • Linux: sudo apt-get update

Детальний посібник щодо оновлення Python залежно від твоєї ОС описано тут: How to update Python

Більше інформації можна знайти у wiki QGSS (Qiskit Global Summer School) 2025: https://github.com/qiskit-community/qgss-2025/wiki/Jupyter-Notebook-Environment-(Local-and-Online)

Ти можеш перевірити встановлення, запустивши комірку нижче. Якщо всі кроки виконано правильно, буде виведено версію qiskit.

# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit
%pip install 'qiskit[visualization]'
%pip install qiskit-ibm-runtime
%pip install qiskit-aer
import qiskit

print(f"Qiskit version: {qiskit.__version__}")

Усунення неполадок

Якщо попередня комірка видала помилку, ти можеш встановити Qiskit у віртуальному середовищі (нижче наведено два рекомендовані методи). Якщо помилок немає, ти можеш пропустити цю комірку й перейти до наступної.

Ось два різних методи налаштування віртуального середовища для встановлення Qiskit.

  1. Використання venv, як описано в посібнику зі встановлення Qiskit.
  2. Використання conda, як показано у відео Coding with Qiskit.

2. Налаштування облікового запису IBM Cloud

Щоб використовувати реальний квантовий комп'ютер, тобі потрібен api key — головний квиток для входу в хмару, а також crn — токен, який надає доступ до твоїх ресурсів при налаштуванні облікового запису.

Налаштуй свій обліковий запис наступним чином:

  1. Перейди на IBM Quantum® Platform.
  2. Перейди у верхній правий кут (як показано на малюнку вище), створи свій API-токен і скопіюй його у надійне місце.
  3. У наступній комірці замість deleteThisAndPasteYourAPIKeyHere вклей свій API-ключ.
  4. Перейди у нижній лівий кут (як показано на малюнку вище) та створи свій екземпляр. Обов'язково обери відкритий план.
  5. Після створення екземпляра скопіюй його CRN-код. Можливо, доведеться оновити сторінку, щоб побачити екземпляр.
  6. У комірці нижче замість deleteThisAndPasteYourCRNHere вклей свій CRN-код.

Дивись цей посібник для отримання додаткових відомостей про налаштування облікового запису IBM Cloud®.

⚠️ Примітка: Зберігай свій API-ключ так само надійно, як пароль. Докладніше про використання API-ключа в безпечних і ненадійних середовищах читай у посібнику Cloud setup.

Крім того, якщо ти є членом університетської мережі партнерів IBM, будь ласка, використовуй корпоративну електронну адресу свого закладу для IBM ID, щоб отримати партнерські переваги.

from qiskit_ibm_runtime import QiskitRuntimeService

# Save your API key and crn and have access to the quantum computers
your_api_key = "deleteThisAndPasteYourAPIKeyHere"
your_crn = "deleteThisAndPasteYourCRNHere"

QiskitRuntimeService.save_account(
channel="ibm_cloud",
token=your_api_key,
instance=your_crn,
overwrite=True
)
# Check that the account has been saved properly
service = QiskitRuntimeService()
service.saved_accounts()
# See backends you can use
service.backends()

3. Твій перший Quantum Circuit

Quantum circuits

Фундаментальна одиниця Qiskit — це quantum circuit, тобто послідовність інструкцій, які квантовий комп'ютер може використовувати для роботи з квантовими бітами інформації, відомими також як qubits. Ці qubits мають особливі властивості, завдяки яким квантові комп'ютери підходять до задач інакше, ніж твій ноутбук чи iPhone. Qiskit швидко розвивається як технологія — хоча ти все ще можеш вручну проектувати свої quantum circuits і вирішувати, як їх запускати (і для цього є чимало вагомих причин), IBM Quantum також надає інструменти, що спрощують цей процес. Задля навчання ми спроектуємо дуже простий Circuit і запустимо його на симуляторі.

Ми стисло оглядаємо цю тему, бо, чесно кажучи, на пояснення основ квантової інформації та обчислень можна витратити години. Насправді IBM Quantum вже зробив це, випустивши письмовий курс та серію відеолекцій на цю тему. Якщо тобі потрібно освіжити знання — перегляни їх!

from qiskit import QuantumCircuit
from qiskit.quantum_info import Statevector
from qiskit.visualization import plot_state_qsphere
from qiskit_aer import AerSimulator
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import SamplerV2 as Sampler
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.visualization import array_to_latex
from qiskit.visualization import plot_distribution

import numpy as np
from numpy import sqrt

Базові операції з Qubits і вимірювання

Запис станів одного Qubit

Почнімо з розгляду одного qubit. Головна відмінність від класичного біта, який може приймати тільки значення 0 і 1, полягає в тому, що квантовий біт, або qubit, може перебувати у станах 0\vert0\rangle, 1\vert1\rangle, а також у лінійній комбінації цих двох станів. Ця властивість відома як суперпозиція і дозволяє нам записати найзагальніший стан qubit у вигляді:

ψ=1p0+eiϕp1\vert\psi\rangle = \sqrt{1-p}\vert0\rangle + e^{i \phi} \sqrt{p} \vert1\rangle

Якщо ми вимірювали б стан цього qubit, то отримували б результат 11 з імовірністю pp, а результат 00 — з імовірністю 1p1-p. Як бачиш, сума ймовірностей дорівнює 11, тобто ми справді виміряємо або 00, або 11, і інших результатів не існує.

На додаток до pp, ти міг помітити ще один параметр вище. Змінна ϕ\phi позначає відносну квантову фазу між двома станами 0\vert0\rangle і 1\vert1\rangle. Як ми дізнаємося пізніше, ця відносна фаза є досить важливою. Наразі достатньо зазначити, що квантова фаза уможливлює інтерференцію між квантовими станами, що є підставою для написання квантових алгоритмів розв'язання конкретних задач.

Візуалізація квантових станів

Ми візуалізуємо квантові стани протягом усього цього заняття за допомогою того, що відоме як qsphere. Ось як виглядає qsphere для станів 0\vert0\rangle і 1\vert1\rangle відповідно. Зверни увагу, що найвища частина сфери відповідає стану 0\vert0\rangle, а нижня — стану 1\vert1\rangle.

#visualize |0>
sv=Statevector([1, 0])
plot_state_qsphere(sv)

Ту саму QSphere можна отримати за допомогою quantum circuit. Statevector, який ми тут використовуємо, відповідає стану 0|0\rangle. У Qiskit qubit ініціалізується у стані 0|0\rangle. Спробуй запустити наведений нижче circuit і перевір, чи отримаєш ту саму QSphere.

qc1 = QuantumCircuit(1)
sv=Statevector(qc1)
plot_state_qsphere(sv)

Тепер давай візуалізуємо стан 1|1\rangle. Не дивно, що стан суперпозиції з квантовою фазою ϕ=0\phi = 0 та імовірністю p=1/2p = 1/2 (тобто рівна ймовірність виміряти і 0, і 1) зображується на qsphere у вигляді двох точок. Однак зверни також увагу, що розмір кіл у цих двох точках менший, ніж у випадку просто 0\vert0\rangle і 1\vert1\rangle вище. Це тому, що розмір кіл пропорційний імовірності вимірювання кожного стану, яка тепер зменшена вдвічі.

#visualize 1/sqrt(2)|0> + 1/sqrt(2)|1>

sv=Statevector([1/sqrt(2), 1/sqrt(2)])
plot_state_qsphere(sv)

У випадку станів суперпозиції, де квантова фаза не нульова, qsphere дозволяє нам візуалізувати цю фазу, змінюючи колір відповідної кулі. Наприклад, стан із ϕ=90\phi = 90^\circ (градусів) та імовірністю p=1/2p = 1/2 зображений на qsphere нижче.

sv=Statevector([1/sqrt(2), 1/sqrt(2)*1j])
plot_state_qsphere(sv)

Маніпуляції з Qubits

Qubits маніпулюються шляхом застосування квантових Gate. Розглянемо огляд різних Gate, які ми використовуватимемо у наступних вправах.

Спочатку опишемо, як можна змінити значення pp для нашого загального квантового стану. Для цього ми використаємо два Gate:

  1. XX-gate: Цей Gate перекидає між двома станами 0\vert0\rangle і 1\vert1\rangle. Ця операція аналогічна класичному Gate NOT. Тому XX-gate іноді називають бітовим перевертанням або NOT-gate. Математично XX-gate змінює pp на 1p1-p, зокрема з 0 на 1 і навпаки.

  2. HH-gate: Цей Gate дозволяє перейти зі стану 0\vert0\rangle до стану 12(0+1)\frac{1}{\sqrt{2}}\left(\vert0\rangle + \vert1\rangle\right). Цей стан також відомий як +\vert+\rangle. Математично це означає перехід від p=0,ϕ=0p=0, \phi=0 до p=1/2,ϕ=0p=1/2, \phi=0. Оскільки кінцевий стан qubit є суперпозицією 0\vert0\rangle і 1\vert1\rangle, Gate Адамара є справжньою квантовою операцією.

Зверни увагу, що обидва Gate змінили значення pp, але не ϕ\phi. На щастя, дію цих Gate досить просто візуалізувати, дивлячись на рисунок нижче.

Отримавши стан +\vert+\rangle, ми можемо змінити квантову фазу, застосовуючи інші Gate. Наприклад, SS-gate додає фазу 9090 градусів до ϕ\phi, тоді як ZZ-gate додає фазу 180180 градусів до ϕ\phi. Щоб відняти фазу на 9090 градусів, можна застосувати SS^\dagger-gate, який читається як S-даггер і зазвичай записується як sdg. Нарешті, є YY-gate, який застосовує послідовність ZZ та XX Gate.

Ти можеш експериментувати з Gate XX, YY, ZZ, HH, SS і SS^\dagger, щоб звикнути до різних операцій і того, як вони впливають на стан qubit. Для цього відвідай Circuit Composer і запусти наш віджет circuit. Після переходу до Circuit Composer обери Gate для застосування до qubit, а потім — сам qubit (у перших прикладах єдиний qubit для вибору — це qubit 0). Спостерігай, як відповідний стан змінюється з кожним Gate, а також його опис. Інструмент також надає код, що створює відповідний quantum circuit у Qiskit.

Якщо хочеш дізнатися більше про опис квантових станів, оператори Паулі та інші Gate одного qubit, дивись Quantum Information розділу Single System курсу Basics of Quantum Information Джона Ватрауса.

Практика: Quantum Circuits з Gate одного Qubit

Ось чотири невеликі практичні завдання для досягнення різних станів на qsphere. Ти можеш або розв'язати їх за допомогою Circuit Composer і вставити наданий код у відповідні комірки для створення quantum circuits, або безпосередньо вставити комбінацію наступних рядків коду в програму для застосування різних Gate:

qc.x(0) # bit flip qc.y(0) # bit and phase flip qc.z(0) # phase flip qc.h(0) # superpostion qc.s(0) # quantum phase rotation by pi/2 (90 degrees) qc.sdg(0) # quantum phase rotation by -pi/2 (90 degrees)

'(0)' означає, що ми застосовуємо цей Gate до qubit 'q0', тобто до першого (і в даному випадку єдиного) qubit.

Спробуй досягти заданого стану на qsphere у кожному з наступних завдань.

i) Почнімо з бітового перевертання. Мета — досягти стану 1\vert1\rangle починаючи зі стану 0\vert0\rangle.


def create_circuit():
qc = QuantumCircuit(1)
#
#
# FILL YOUR CODE IN HERE
#
#
return qc

# check solution
qc2 = create_circuit()
state = Statevector(qc2)

plot_state_qsphere(state, show_state_labels=True, show_state_phases = True, use_degrees = True)

ii) Тепер створимо суперпозицію. Мета — досягти стану +=12(0+1)|+\rangle = \frac{1}{\sqrt{2}}\left(|0\rangle + |1\rangle\right).


def create_circuit2():
qc = QuantumCircuit(1)
#
#
# FILL YOUR CODE IN HERE
#
#
return qc

qc3 = create_circuit2()
state = Statevector(qc3)
plot_state_qsphere(state, show_state_labels=True, show_state_phases = True, use_degrees = True)

iii) Поєднаємо ці два. Мета — досягти стану =12(01)|-\rangle = \frac{1}{\sqrt{2}}\left(|0\rangle - |1\rangle\right).

Чи зможеш поєднати два вищенаведені завдання для знаходження рішення?

def create_circuit3():
qc = QuantumCircuit(1)
#
#
# FILL YOUR CODE IN HERE
#
#
return qc

qc4 = create_circuit3()
state = Statevector(qc4)
plot_state_qsphere(state, show_state_labels=True, show_state_phases = True, use_degrees = True)

iv) Нарешті, переходимо до комплексних чисел. Мета — досягти стану =12(0i1)|\circlearrowleft\rangle = \frac{1}{\sqrt{2}}\left(|0\rangle - i|1\rangle\right)

def create_circuit4():
qc = QuantumCircuit(1)
#
#
# FILL YOUR CODE IN HERE
#
#
return qc

qc5 = create_circuit4()
state = Statevector(qc5)

plot_state_qsphere(state, show_state_labels=True, show_state_phases = True, use_degrees = True)

4. Квантова вікторина з багатокубітними Gate

Чудово! Тепер, коли ти розібрався з однокубітними Gate, розглянемо Gate, що діють на декілька Qubit. Тут тобі буде запропоновано розв'язати 4 вікторини з квантових станів, комбінуючи однокубітні та багатокубітні Gate. Базові Gate для двох Qubit задаються так:

qc.cx(c,t) # controlled-X (= CNOT) gate with control qubit c and target qubit t qc.cz(c,t) # controlled-Z gate with control qubit c and target qubit t qc.swap(a,b) # SWAP gate that swaps the states of qubit a and qubit b

Якщо ти хочеш дізнатися більше про різні багатокубітні Gate та їхні зв'язки, відвідай Quantum Information для систем із кількох частин у курсі Джона Basics of Quantum Information.

Зверни увагу, що для двох Qubit загальний стан має вигляд a00+b01+c10+d11a|00\rangle + b |01\rangle + c |10\rangle + d|11\rangle, де aa, bb, cc та dd — комплексні числа, квадрати модулів яких дають імовірність виміряти відповідний стан; наприклад, a2|a|^2 — це імовірність отримати стан '0' на обох Qubit. Це означає, що тепер на qsphere може бути до чотирьох точок.

Почнемо з канонічного двокубітного Gate — controlled-NOT (також CNOT або CX). Тут, як і в усіх керованих двокубітних Gate, один Qubit позначається як "control" (керуючий), а інший — як "target" (цільовий). Якщо контрольний Qubit перебуває у стані 0|0\rangle, на цільовий застосовується тотожний Gate II, тобто жодна операція не виконується. Натомість, якщо контрольний Qubit перебуває у стані 1|1\rangle, на цільовий Qubit застосовується X-gate. Таким чином, коли обидва Qubit перебувають в одному з двох класичних станів, 0|0\rangle або 1|1\rangle, CNOT Gate обмежений класичними операціями.

Ситуація кардинально змінюється, коли ми спочатку застосовуємо Hadamard gate до контрольного Qubit, переводячи його у стан суперпозиції +|+\rangle. Дія CNOT gate на такий некласичний вхід може породжувати сильно заплутані стани між контрольним і цільовим Qubit. Якщо цільовий Qubit спочатку перебуває у стані 0|0\rangle, результуючий стан позначається Φ+|\Phi^+\rangle і є одним із так званих Bell states.

i) Побудуй Bell state Φ+=12(00+11)|\Phi^+\rangle = \frac{1}{\sqrt{2}}\left(|00\rangle + |11\rangle\right).

Для цього стану імовірність виміряти "00" дорівнює 12\frac{1}{2}, а імовірність виміряти "11" — також 12\frac{1}{2}. Таким чином, результати вимірювання обох Qubit ідеально корельовані.


def create_circuit5():
qc = QuantumCircuit(2)
#
#
# FILL YOUR CODE IN HERE
#
#
return qc

qc6 = create_circuit5()
state = Statevector(qc6) # determine final state after running the circuit
display(array_to_latex(state))
display(plot_state_qsphere(state, show_state_labels=True, show_state_phases = True, use_degrees = True))
qc6.draw(output='mpl') # we draw the circuit

Далі спробуй створити стан ідеально антикорельованих Qubit. Зверни увагу на знак мінус, який вказує на відносну фазу між двома станами.

ii) Побудуй Bell state Ψ=12(0110)\vert\Psi^-\rangle = \frac{1}{\sqrt{2}}\left(\vert01\rangle - \vert10\rangle\right).


def create_circuit6():
qc = QuantumCircuit(2)
#
#
# FILL YOUR CODE IN HERE
#
#
return qc

qc7 = create_circuit6()
state = Statevector(qc7) # determine final state after running the circuit
display(array_to_latex(state))
display(plot_state_qsphere(state, show_state_labels=True, show_state_phases = True, use_degrees = True))
qc7.draw(output='mpl') # we draw the circuit

iii) Тобі надано квантовий Circuit, описаний у функції нижче. Поміняй місцями стани першого та другого Qubit, щоб отримати цей QSphere.

def create_circuit7():
qc = QuantumCircuit(2)
qc.rx(np.pi/3,0)
qc.x(1)
return qc

qc8 = create_circuit7()

#
#
# FILL YOUR CODE IN HERE
#
#

state = Statevector(qc8) # determine final state after running the circuit
display(array_to_latex(state))
display(plot_state_qsphere(state, show_state_labels=True, show_state_phases = True, use_degrees = True))
qc8.draw(output='mpl') # we draw the circuit

iv) Напиши програму з нуля, яка створює GHZ state (на трьох Qubit): GHZ=12(000+111)\vert \text{GHZ}\rangle = \frac{1}{\sqrt{2}} \left(|000\rangle + |111 \rangle \right)


def create_circuit8():
#
#
# FILL YOUR CODE IN HERE
#
#
#
return qc

qc9 = create_circuit8()

pub4 = (qc9)

state = Statevector(qc9) # determine final state after running the circuit
display(array_to_latex(state))
display(plot_state_qsphere(state, show_state_labels=True, show_state_phases = True, use_degrees = True))
qc9.draw(output='mpl') # we draw the circuit

5. Запусти свій Circuit та переглянь результати вимірювання на реальному квантовому комп'ютері

Тепер ти вмієш будувати квантовий Circuit для маніпуляцій зі statevector Qubit. Настав час для найцікавішого: запустити його та побачити результат! Тут ми навчимося сучасному й ефективному способу виконання Circuit за допомогою Qiskit.

Qiskit pattern — це загальний фреймворк для розбиття предметно-специфічних задач і контекстуалізації необхідних можливостей поетапно. Це забезпечує безперешкодну компонованість нових можливостей, розроблених дослідниками IBM Quantum (та іншими), і уможливлює майбутнє, в якому квантові обчислювальні задачі виконуватимуться на потужній гетерогенній (CPU/GPU/QPU) обчислювальній інфраструктурі.

Qiskit pattern складається з чотирьох кроків:

  1. Map — відображення задачі на квантові Circuit та оператори
  2. Optimize — оптимізація для цільового апаратного забезпечення
  3. Execute — виконання на цільовому апаратному забезпеченні
  4. Post-process — постобробка результатів

Ми щойно завершили Step 1: Mapping, побудувавши квантові Circuit для генерації бажаного квантового стану. Тепер пройдемо решту кроків, щоб побачити результати.

Optimize

Тут ми задаємо Backend для виконання Circuit — ти можеш обрати least busy QPU з доступних тобі груп QPU або просто вибрати симулятор, якщо залишку GPU-часу недостатньо. Після вибору Backend pass_manager виконає transpile твоїх Circuit у набір нативних Gate обраного Backend та оптимізує їх для кращого результату. pass_manager легко оголосити за допомогою generate_preset_pass_manager, задавши optimization_level — більше число означає більше кроків оптимізації.

Наступний крок дуже захопливий — ми запустимо квантовий Circuit за допомогою Qiskit Runtime!

Ми зробимо це за допомогою двох Qiskit primitives:

  1. Sampler відбирає вихідний регістр під час виконання одного або кількох квантових Circuit. Його вивід — це підрахунки по окремих вимірюваннях (per-shot).
  2. Estimator обчислює очікуване значення одного або кількох спостережуваних відносно станів, породжених квантовим Circuit. Його вивід — очікувані значення разом із їхніми стандартними похибками.

Тут ми використаємо Sampler для виконання наших Circuit. Наведена нижче комірка коду показує, як спочатку визначити Backend і pass manager для нього. Потім до всіх Circuit буде додано measurement, і буде створено масив квантових Circuit (pub) для передачі в Sampler.


backend=service.least_busy()
#backend=AerSimulator()

pm = generate_preset_pass_manager(optimization_level=3, backend=backend)
sampler = Sampler(mode=backend)

pub = []
for qc in circ:
qc.measure_all()
pub.append(pm.run(qc))

Execute

Виконаємо наші Circuit. Якщо в хмарі велика черга очікування, виведи та збережи job_id для подальшого використання та перевір статус завдання. Після того як статус завдання зміниться на Done, отримай результат завдання.

job = sampler.run(pub)
job_id = job.job_id()
print(job_id)
job.status()
job_retrived = service.job(job_id)
result = job.result()

Post-process

Останній крок — інтерпретація візуалізації для розуміння квантових станів, які ми створили. Перш ніж будувати графіки, зберемо всі підрахунки з усіх Circuit. Після цього ми побудуємо 4 графіки, розбивши Circuit на категорії.

result = job.result()
counts_all = [result[k].data.meas.get_counts() for k in range(9)]

Однокубітні стани

plot_distribution([counts_all[0], counts_all[1]], legend =['qc1', 'qc2'])

Однокубітні стани суперпозиції

plot_distribution([counts_all[2], counts_all[3], counts_all[4]], legend =['qc3', 'qc4', 'qc5'])

Двокубітні стани

plot_distribution([counts_all[5], counts_all[6], counts_all[7]],legend =['qc6', 'qc7', 'qc8'] )

Трикубітні стани

plot_distribution(counts_all[8], legend=['qc9'])

Додаткове завдання

Чи виявив ти шум у реальних експериментальних результатах Backend? Усунення шуму Qubit — одна з активних областей досліджень. Спробуй різні параметри пом'якшення та придушення помилок Qiskit Runtime, щоб побачити, як змінюється шум у результатах виконання! (Примітка) Ці параметри потребують більше часу QPU.

Додаткова інформація

import qiskit, qiskit_ibm_runtime

print("Qiskit version:", qiskit.version.get_version_info())
print("Qiskit Runtime version:", qiskit_ibm_runtime.__version__)
Qiskit version: 2.1.1
Qiskit Runtime version: 0.40.1

Створено: Sophy Shin

Перевірено: Nate Earnest-Noble

© IBM Corp., 2025

Поширюється за ліцензією Apache License, Version 2.0. Копію цієї ліцензії можна отримати у файлі LICENSE в кореневому каталозі дерева джерел або за адресою http://www.apache.org/licenses/LICENSE-2.0.

Будь-які модифікації або похідні роботи повинні зберігати це повідомлення про авторські права, а змінені файли мають містити позначку про те, що вони були змінені порівняно з оригіналами.